簡體   English   中英

關系表的最佳方法

[英]Best way with relation tables

我對表和關系表有疑問...
其實我有這三張桌子

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表就像您現在可以做的那樣。

通常,對於一對一或一對多關聯,可以通過外鍵進行鏈接。 對於多對多關聯,您希望在兩者之間有一個關聯表。 這種情況是多對多關系,因為每個用戶有多個國家,每個國家有多個用戶。

為什么不這樣嘗試:首先創建表格國家/地區

CREATE TABLE COUNTRY (
  CID int(11) NOT NULL AUTO_INCREMENT,
  COUNTRY_NAME varchar(14) DEFAULT NULL
);

Then the table user:

CREATE TABLE USER (
  ID int(11) NOT NULL AUTO_INCREMENT,
  NAME varchar(14) DEFAULT NULL,
  CID Foreign Key References CID inCountry
);

只需在它們之間創建外鍵關系。

如果嘗試將此作為顯式關系,將有很多冗余數據。

這是更好的方法。 您還可以將該外鍵作為索引。 因此,在搜索操作期間,數據庫檢索變得很快。

希望這可以幫助..

注意:不確定外鍵的確切語法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM