0

次のデータベース設計の要件があります。

DEVICE という名前のすべてのデバイス用のテーブルと、ROOM という名前の部屋用のテーブルがあります。各デバイスは、別のデバイスまたは部屋に割り当てる必要があります。現在、フィールド名Device.RoomIdのデバイスからルームへのnull可能な外部キー関係接続と、Device.ContainerIdのデバイスをそれ自体に結合する別のnull可能な外部キー関係があります。

データベースの制約/fk の関係を通じて適用できる、より適切な設計はありますか? 悪いデータが保存されるのを防ぐために適切なコードを作成する必要があることは理解していますが、データベースにルールを適用することで安全性を高めたいと考えています。

4

1 に答える 1

2

問題ないように思えますが、チェック制約を追加して、親の 1 つが であることを確認できますNOT NULL

次の疑似コードを検討してください。

CREATE TABLE Device (
    DeviceId int NOT NULL PRIMARY KEY,
    Name string NOT NULL UNIQUE,
    ParentDeviceId int NULL FOREIGN KEY Device (DeviceId),
    ParentRoomId int NULL FOREIGN KEY Room (RoomId),
    CHECK (
        (
            ParentDeviceId IS NULL
                AND ParentRoomId IS NOT NULL
        ) OR (
            ParentDeviceId IS NOT NULL
                AND ParentRoomId IS NULL
        )
    )
)

CREATE TABLE Room (
    Room Id int NOT NULL PRIMARY KEY,
    Name string NOT NULL UNIQUE
)
于 2013-05-30T16:13:26.080 に答える