假設我有3個表格:enterprise, users, houses
。如何在SQL中創建表模型?
每個人都需要一個地址。我該怎麼辦?
- 爲每個人創建表格地址?
- 創建一個唯一的表地址?
假設第一個更「正確」(緩存,碎片,大小......),我應該如何在純SQL中編寫它?
如何創建表格地址的「模型」,並將其用於自定義表格(例如enterprise_address)? *所以當我改變模型中的一個字段時,它會被複制。
假設我有3個表格:enterprise, users, houses
。如何在SQL中創建表模型?
每個人都需要一個地址。我該怎麼辦?
假設第一個更「正確」(緩存,碎片,大小......),我應該如何在純SQL中編寫它?
如何創建表格地址的「模型」,並將其用於自定義表格(例如enterprise_address)? *所以當我改變模型中的一個字段時,它會被複制。
好吧,我找到了答案,PostgreSQL的:使用INHERITS
例如CREATE TABLE name() INHERITS (table_model)
謝謝大家的答案。
看來你需要每個用戶都有一個地址。你有多種方法來解決它。
處理它在UI
表
create table addresses (addressid int not null PK, line1, line2, city ...);
create table users (userid int not null PK, username, ...);
create table user_addresses (user_addressid int, userid int, addressid int, UK userid + addressid, FK to users, FK to addresses);
這允許用戶有多個地址。您可以靈活地標記哪一個是主要的。
處理它在DB(和UI)
create table addresses (addressid int not null PK, ....);
create table users (userid int not null PK, username varchar(20), ..., addressid int not null, FK to addresses);
這允許每個用戶一個地址。
並在UI上處理它以確保提供地址。首先輸入地址,然後輸入用戶(使其成爲原子進程;使用交易!)
您可以從一個這些方法開始,並分析您的業務需求。如果您有DBA,請與您的DBA一起工作,看看他們的經驗對業務和以前的數據庫設計有什麼影響。
只是從三個給定的表格中,我會假設地址是你想要放在房屋或用戶的東西。
取決於你想在地址中追蹤多少細節,它可能是在製作一個單獨的表格,但有很多方法可以解決這個問題,正確的方法僅取決於你試圖實現的目標。
不知道任何所需的信息,我只能奉勸的是,你的目標應該是存儲地址作爲唯一的值。一旦你有了這個,你可以分配每個地址到你希望使用外鍵的任何其他表。
如果要存儲地址的多個字段,那麼你將需要一個單獨的表,如果單場會做那麼它可以很容易地被添加到人或房屋表。
一兩件事,這將使以哪種方式,你會想這樣做的一個主要區別是地址和其他實體之間的關係。例如,如果用戶可以擁有多個地址,那麼你不能將其作爲用戶表的一部分,並且如果一個地址可以有多個用戶分配給它,那麼它就不能使用FK來表示它與用戶表的關係。你可以這樣做
一種方法是使關係表。所以你讓地址和用戶分開表,然後有另一個表,只有一個id(pk)和2 fks將它鏈接到其他表中的每個表。如果你願意,這樣你可以有多對多的關係。
第一個問題:每家企業/用戶/房子多少地址?如果每個實體有多個地址,則會導致您想要一個單獨的地址表,可能使用地址類型。多個地址的情況下
例子:
如果你要斷言實體方能有一個地址,爲簡單起見,您可能更願意將地址部分作爲實體行。但是,可以有理由不這樣做;例如,表格寬度(表格中的列數)。
如果每個實體的多個地址,通常你會使用外鍵。實體應該有一個抽象鍵:某種類型的ID。這可能是一個整數,或者在SQL Server中,它可能是一個唯一標識符。實體ID將成爲地址密鑰的一部分。
從您的業務需求開始,設計一個數據庫來滿足它們。以後再擔心其他問題。 –
@DanBracuk我真的同意你的看法。 「不成熟的優化是萬惡之源」。 – user1101
@ user1101下面有一些非常好的答案。請隨時通過接受答案來結束您的問題。 – zedfoxus