3NFで少なくとも5つのテーブルを持つデータベースを作成しています。私がデータベースを集めることができるところから、3NFのデータベースの仕様を見ると3NFですが、私はここで尋ねているのは100%確信していません。もしそうでなければ、3NFにする方法が不思議ですので、私は上に移動し、データベース上でテストクエリ、トリガ、およびプロシージャを試すことができます。3NFへのデータベースの正規化
this私は3NFであると私は理解していると仮定してサンプルデータベースをオフにしています。
私が数日間この問題を抱えているので、助けやアドバイスは本当に感謝しています。
CREATE TABLE IF NOT EXISTS xbox (
game_id char(4) NOT NULL default '',
game_name varchar(32) default NULL,
developer varchar(32) default NULL,
PRIMARY KEY (game_id)
);
INSERT INTO xbox (game_id, game_name, developer) VALUES
('1001', 'Sunset Overdive', 'Insomniac Games'),
('1002', 'Quantum Break', 'Remedy Entertainment'),
('1003', 'Gears of War 4', 'The Coalition'),
('1004', 'Halo 5', '343 Industries'),
('1005', 'Forza 6', 'Turn10 Studios');
CREATE TABLE IF NOT EXISTS playstation (
game_id char(4) NOT NULL default '',
game_name varchar(32) default NULL,
developer varchar(32) default NULL,
PRIMARY KEY (game_id)
);
INSERT INTO playstation (game_id, game_name, developer) VALUES
('2001', 'Bloodborne', 'From Software'),
('2002', 'The Witness', 'Thekla'),
('2003', 'Destiny', 'Bungie'),
('2004', 'Black Ops 3', 'Treyarch'),
('2005', 'DriveClub', 'Evolution');
CREATE TABLE IF NOT EXISTS pc (
game_id char(4) NOT NULL default '',
game_name varchar(32) default NULL,
developer varchar(32) default NULL,
PRIMARY KEY (game_id)
);
INSERT INTO pc (game_id, game_name, developer) VALUES
('3001', 'Fallout 4', 'Bethesda'),
('3002', 'Tomb Raider', 'Crystal Dynamics'),
('3003', 'Overwatch', 'Blizzard'),
('3004', 'Rocket League', 'Psyonix'),
('3005', 'DiRT Rally', 'Codemasters');
CREATE TABLE IF NOT EXISTS nintendo (
game_id char(4) NOT NULL default '',
game_name varchar(32) default NULL,
developer varchar(32) default NULL,
PRIMARY KEY (game_id)
);
INSERT INTO nintendo (game_id, game_name, developer) VALUES
('4001', 'Mario Kart 8', 'Nintendo'),
('4002', 'Mario Maker', 'Nintendo'),
('4003', 'Mario Party 9', 'Nintendo'),
('4004', 'Bayonetta 2', 'Nintendo'),
('4005', 'Splatoon', 'Nintendo');
CREATE TABLE IF NOT EXISTS sales (
customer_id char(10) NOT NULL default '',
game_id char(4) NOT NULL default '',
quantity int(11) default NULL,
paid double default NULL,
payment varchar(32) default NULL,
PRIMARY KEY (game_id)
);
INSERT INTO sales (customer_id, game_id, quantity, paid, payment) VALUES
('1234567890', '1002', 1, 79.99, 'Debit'),
('0987654321', '2003', 1, 50, 'Credit'),
('1122334455', '2001', 2, 120, 'Cash'),
('6677889900', '4004', 3, 110.49, 'Cash'),
('1357924680', '3002', 1, 50, 'Credit');
CREATE TABLE IF NOT EXISTS products (
game_id char(10) default NULL,
platform varchar(32) default NULL,
stock int(11) default NULL,
price double default NULL,
PRIMARY KEY (game_id)
);
INSERT INTO products (game_id, platform, stock, price) VALUES
('1001', 'xbox', 33, 69.99),
('1002', 'xbox', 42, 79.99),
('1003', 'xbox', 50, 89.99),
('1004', 'xbox', 80, 59.99),
('1005', 'xbox', 10, 49.99),
('2001', 'playstation', 12, 55.99),
('2002', 'playstation', 44, 34.99),
('2003', 'playstation', 89, 45.99),
('2004', 'playstation', 65, 39.99),
('2005', 'playstation', 73, 19.99),
('3001', 'pc', 50, 69.99),
('3002', 'pc', 41, 49.99),
('3003', 'pc', 77, 59.99),
('3004', 'pc', 24, 19.99),
('3005', 'pc', 19, 24.99),
('4001', 'nintendo', 10, 19.99),
('4002', 'nintendo', 17, 39.99),
('4003', 'nintendo', 33, 28.99),
('4004', 'nintendo', 53, 34.99),
('4005', 'nintendo', 97, 15.99);
現在のデータを見ると、3つのテーブル、プラットフォーム、ゲーム、ベースの開発者があります。 Platforms X Gamesのリレーションシップ・テーブルを追加することもできます。リレーションシップ・テーブルを制限するのではなく、複数のプラットフォームで実行できるゲーム用に追加することもできます。それを道路の下でさらにカスタマイズすることができます。 – Prix
あなたは1NF(または何か)に違反しています。複数の部分のキーを持っています。そこにある「接頭辞」を見てください。 'products.platform'を使って何かを違反しています - " source "テーブルに一致する行がない場合はどうなりますか?将来はさらにテーブルを追加する必要があるかもしれないので、コンソールごとのテーブルは必要ありません。 'Developer'テーブルがあるはずです(明白な理由から)。 'Sales.paid'は絶対に' double'でなければいけません。 'decimal' /' numeric'が必要です( '.1'をダブルに書くことはできません) –
返事をありがとう。 int値にして 'products.platform'を完全に削除するのが良いでしょうか? – JamesR