0

MySQL との関係に問題があります。これが 1 対 1 の関係 (アカウントとゲストの間) かどうか誰か教えてください。

CREATE TABlE IF NOT EXISTS account
(
accountID       INT UNSIGNED    NOT NULL COMMENT 'primary key',   
guestFK         INT UNSIGNED    NOT NULL COMMENT 'account linked to particular guest',
password        VARCHAR(20)     NOT NULL COMMENT 'password of guest account',
CONSTRAINT account_PK PRIMARY KEY (accountID), 
CONSTRAINT account_FK FOREIGN KEY (accountID) REFERENCES hotel.guest(guestID)
);



CREATE TABLE IF NOT EXISTS guest
(
guestID     INT UNSIGNED    NOT NULL AUTO_INCREMENT  COMMENT 'primary key',
addressFK   INT UNSIGNED    NOT NULL COMMENT 'foreign key of guest address',
vehicleFK   INT UNSIGNED             COMMENT 'foreign key of guest vehicle',

firstName   VARCHAR(50)     NOT NULL COMMENT 'first name of guest',
lastName    VARCHAR(50)     NOT NULL COMMENT 'last name of guest',
phoneNum    INT UNSIGNED    NOT NULL COMMENT 'phone number of guest',
eMail       VARCHAR(50)     NOT NULL COMMENT 'e-mail address of guest',

CONSTRAINT guest_PK PRIMARY KEY (guestID),
CONSTRAINT address_FK FOREIGN KEY (addressFK) REFERENCES hotel.address(addressID),
CONSTRAINT vehicle_FK FOREIGN KEY (vehicleFK) REFERENCES hotel.vehicle(vehicleID),
CONSTRAINT email_UQ UNIQUE (eMail) COMMENT 'no two guests should have the same e-mail address',
CONSTRAINT guest_UQ UNIQUE (firstName, lastName, phoneNum) COMMENT 'no two guests  should have same name and phone number' 
);
4

3 に答える 3

1

いいえ、そうではありません。アカウント テーブルの制約をゲスト外部キーに指定できませんでした。現状では、同じゲストに対して複数のアカウントを持つことができます。

guestFK を一意としてマークすることを検討してください。これはまた、guestFK が主キーとして機能する可能性があるため、リレーショナル モデルを再検討する必要があることを示します。これにより、accountID が不要になります。

ゲスト テーブルでは、次のフィールドに対する複合キーを検討してください:
名、姓、電子メール、電話番号

また、パスワードを保存しておらず、実際にソルト付きハッシュのみを保存していることを確認してください。

于 2013-08-07T18:17:40.433 に答える
0

ほとんど... guestFK によってアカウント テーブルに既に接続されている場合、ゲスト テーブルの外部キー (accountFK) は必要ありません。これを行うには、次の 2 つの方法があります。

  1. アカウント テーブルに外部キー (guestFK) を保持し、ゲスト テーブルから外部キー (accountFK) を削除します。
  2. 外部キー (accountFK) をゲスト テーブルに保持し、アカウント テーブルから外部キー (guestFK) を削除します。
于 2013-08-07T18:18:23.280 に答える
0

guestFKフィールドを参照する外部キーとして持っていguest.guestIDます。外部キー関係とは、アカウントが多くのゲストを持つことができることを意味します。SO DB 設計に関しては、答えはNOです。1 対 1 ではありません。

于 2013-08-07T18:18:41.547 に答える