我有一个关于表和关系表的问题… 实际上,我有这三个表
CREATE TABLE USER ( ID int(11) NOT NULL AUTO_INCREMENT, NAME varchar(14) DEFAULT NULL ); CREATE TABLE COUNTRY ( ID int(11) NOT NULL AUTO_INCREMENT, COUNTRY_NAME varchar(14) DEFAULT NULL ); CREATE TABLE USER_COUNTRY_REL ( ID int(11) NOT NULL AUTO_INCREMENT, ID_USER int(11) NOT NULL, ID_COUNTRY int(11) NOT NULL, );
好的,因此,现在,一个用户可以拥有一个或多个国家,因此,表USER_COUNTRY_REL中的多个条目可供一个用户使用。 但是,我的表USER包含近130.000个条目… 即使按用户1个国家/地区,USER_COUNTRY_REL表也接近10Mo。 我有几种与此样式相关的表格…
我的问题是,这是最快,更好的方法吗?
直接将它放在包含不同ID(例如:“ 2,6,…”)的USER表的COUNTRY字段中会更好吗?
谢谢你们 ;)
就时间限制而言,您拥有的方式是最佳的。当然,它会占用更多空间,但这只是时空折衷的一部分- 如果您想提高速度,就可以使用更多空间。如果您想使用更少的空间,它的运行速度将会变慢(平均而言)。
此外,请考虑未来。现在,您可能正在为每个用户选择国家/地区,但请稍候。多亏了范围爬行的魔力,您的应用程序有一天需要选择给定国家/地区的所有用户,这时扫描每个用户的“ COUNTRY”字段以查找匹配项将变得异常缓慢,而与之相反, USER_COUNTRY_REL表就像您现在可以做的那样。
通常,对于一对一或一对多关联,您可以通过外键进行链接。对于多对多关联,您希望在两者之间有一个关联表。这种情况是多对多关系,因为每个用户有多个国家,每个国家有多个用户。