admin

关系表的最佳方法

sql

我有一个关于表和关系表的问题…
实际上,我有这三个表

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字段中会更好吗?

谢谢你们 ;)


阅读 189

收藏
2021-07-01

共1个答案

admin

就时间限制而言,您拥有的方式是最佳的。当然,它会占用更多空间,但这只是时空折衷的一部分-
如果您想提高速度,就可以使用更多空间。如果您想使用更少的空间,它的运行速度将会变慢(平均而言)。

此外,请考虑未来。现在,您可能正在为每个用户选择国家/地区,但请稍候。多亏了范围爬行的魔力,您的应用程序有一天需要选择给定国家/地区的所有用户,这时扫描每个用户的“
COUNTRY”字段以查找匹配项将变得异常缓慢,而与之相反, USER_COUNTRY_REL表就像您现在可以做的那样。

通常,对于一对一或一对多关联,您可以通过外键进行链接。对于多对多关联,您希望在两者之间有一个关联表。这种情况是多对多关系,因为每个用户有多个国家,每个国家有多个用户。

2021-07-01