![](/img/trans.png)
[英]what is the best way to design mysql tables which has relation to each other?
[英]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.