簡體   English   中英

我可以在同一張表中有2個唯一的列嗎?

[英]Can I have 2 unique columns in the same table?

我有2張桌子:

  • roomtypes [id(PK),name,maxAdults ...]
  • 功能(例如:室內互聯網,衛星電視)

在MySQL MYISAM的同一張表中,id和name字段可以唯一嗎?

如果以上情況可行,我正在考慮將表格更改為:

  • 功能[id(PK),名稱,房間類型ID] ==>功能[id(PK),名稱,房間類型NAME]

...因為這有助於我不要在演示文稿中對功能進行額外的查詢,因為前端用戶無法使用ID。

當然,您可以將它們之一設置為PRIMARY,然后將其設置為UNIQUE。 或兩者都唯一。 或者,如果您願意,可以選擇一個PRIMARY和四個UNIQUE

是的,您可以為除主鍵以外的其他列定義UNIQUE約束,以確保數據在行之間是唯一的。 這意味着該值只能在該列中存在一次-任何嘗試添加重復項的操作都將導致唯一約束沖突錯誤。

我正在考慮將FEATURES表更改為features [id(PK),名稱,roomtypeNAME],因為這有助於我不要在演示文稿中對功能進行額外的查詢,因為前端用戶無法使用ID。

有兩個問題:

  1. ROOM_TYPE_NAME唯一約束將不起作用-您將具有給定房間類型的多個實例,並且唯一約束旨在阻止這種情況。
  2. 由於未在ROOM_TYPES表中使用外鍵,因此您可能會遇到“ Double”,“ double”,“ dOUBle”等值

為了您的數據,我建議您堅持使用原始設計; 您的應用程序可以將房間類型轉換為相應的ROOM_TYPE記錄,而UI則可以將其顯示。

我希望這樣,否則MySQL不符合SQL標准。 您只能有一個主鍵,但可以將其他列標記為唯一。

在SQL中,這可以通過以下方式實現:

create table tbl (
    colpk char(10) primary key,
    coluniq char(10) unique,
    colother char(10)
);

還有其他方法可以做到這一點(尤其是使用多部分鍵),但這是一個簡單的解決方案。

是的你可以。

還請記住,MySQL在唯一列中允許NULL值,而作為主鍵的列不能具有NULL值。

再次感謝您提供非常有用的答案。

1個房間類型可能具有許多功能

1個功能可能分配給許多房間類型

那我有什么類型的關系? M:N?

如果是,我看到的解決方案是將表結構更改為roomTypes [id,...,featuresIDs] features [id(PK),name,roomtypeIDs]多個用逗號分隔的roomTypesID?

1個RoomType可能具有許多功能
1個功能可以分配給許多RoomType
那我有什么類型的關系? M:N?

您有一個多對多關系,必須用一個額外的表來表示。
該關系表將具有2個字段:RoomTypes的PK和Features的PK。
關系表的PK將由這兩個字段組成。 如果有用,則可以添加諸如“數量”之類的其他字段。

我想鼓勵您閱讀有關數據庫規范化的知識,這是他為關系數據庫創建正確設計的過程。 您可以為此搜索Google,或最終在這里查看 (關於此的書籍/網頁很多)

暫無
暫無

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

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