1

Example table:

Ticket
    - id
    - tenant_id
    - foo
TicketItem
    - id
    - tenant_id
    - ticket_id
    - bar

Assuming that id and tenant_id on each table make up composite primary keys, and that ticket_id is a foreign key to Ticket will this setup protect me from a circumstance where a TicketItem has tenant_id=1 and ticket_id=5 where the Ticket with id=5 has tenant_id=2? In simpler words, would the database allow me to link rows from 2 tables - each with different tenant_id - together, ruining my data, or does it protect me from this?

Also, does the above example seem like a "good" use of a composite primary key?

4

3 に答える 3

1

テーブルTicketの主キーが(TicketID, TenantID)の場合、テーブルを参照するすべてのテーブルも両方のTicketを参照する必要があります。

TicketItem(TicketID,TenantID) ==> Ticket(TicketID,TenantID)

(複合) 主キーの一部だけを参照することはできません。たとえば、テーブルTicketIDTicketItem参照することはできませんTicket。複合主キーを参照するすべての外部キーで、複合主キーの両方の部分が必要です (複合インデックスの主な欠点の 1 つです)。 、私の意見では、結合が面倒になります)

于 2011-04-03T19:18:43.610 に答える
0

「id=5のチケットにtenant_id=2がある場合」

その言い回し(「チケット」)に基づいて、id = 5のチケットは1つだけですか?もしそうなら、それがあなたの主キーであり、tenant_idを使用して複合キーを作成することは物事をより面倒にするだけです。

複数のid=5を持つことができる場合は、複合キーを使用できます。参照を機能させるには、両方を正しく一致させる必要があります。

于 2011-04-03T19:23:06.310 に答える
0

私が正しく理解していれば、TicketItem の外部キーは Ticket テーブルの id フィールドと tenant_id フィールドの両方を参照する必要があります。外部キーは主キーを参照する必要があります。id のみを参照する場合は、チケット テーブルの主キーを参照していません。チケット テーブルには、id フィールドと tenant_id フィールドの両方を含む複合キーが含まれているためです。

Ticket テーブルの主キー (id と tenant_id の両方) を参照する外部キーが TicketItem にある場合、対応する id + tenant_id レコードを持っていない TicketItem テーブルのレコードを挿入/更新することはできません。チケットテーブル(これはあなたが望むものです)。

TicketItem: 外部キーは ticket_id -> Ticket.id AND tenant_id -> Ticket.tenant_id を参照する必要があります

複合キーの「良い」使用に関しては、設計/要件によって異なりますが、「悪い」ことは何もありません。

于 2011-04-03T18:58:57.723 に答える