私は携帯電話と料金表のデータベーステーブルを設計しました。
複数のモバイルネットワーク、販売タイプ、および関連するアフィリエイトをサポートする必要があります。
ポイント(オペレーター向け)は、選択した電話、料金、ネットワーク、販売タイプによって異なります。
価格プランの例:
T-Mobile:消費者向けアップグレード
- サムスンギャラクシーS3
- 料金:スーパーワン(月額料金:$ 12.00)
- 「RetailerOne」とのこの販売アフィリエイト
- 合計ポイント:3.3
T-Mobile:コンシューマーの新しい接続
- サムスンギャラクシーS3
- 料金:スーパーワン(月額料金:$ 35.00)
- この販売アフィリエイトは「小売業者2」と提携しています
- 合計ポイント:7.3
AT&T:'Sim Only Deal'(電話なし)
- 料金:X-Deal Two(月額費用:$ 18.00)
- 「RetailerOne」とのこの販売アフィリエイト
- 合計ポイント:10.0
以下のテーブルデザインを参照してください。これはどのように行われるべきですか?またはそれをどのように改善できますか?
データベース設計:
CREATE TABLE IF NOT EXISTS `affiliate` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `affiliate` (`id`, `name`) VALUES
(1, 'Retailer One'),
(2, 'Retailer Two');
CREATE TABLE IF NOT EXISTS `network` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `network` (`id`, `name`) VALUES
(1, 'T-Mobile'),
(2, 'AT&T');
CREATE TABLE IF NOT EXISTS `network_saletype` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`network_id` int(11) NOT NULL,
`saletype_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `network_saletype` (`id`, `network_id`, `saletype_id`) VALUES
(1, 1, 1),
(2, 2, 3);
CREATE TABLE IF NOT EXISTS `phone` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`description` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `phone` (`id`, `name`, `description`) VALUES
(1, 'Samsung Galaxy S3', ' Quad-core, NFC, AMOLED'),
(2, 'Apple iPhone 4S', 'A5 chip, 8MP camera, Siri voice');
CREATE TABLE IF NOT EXISTS `phone_points` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`phone_id` int(11) NOT NULL,
`tarrif_id` int(11) NOT NULL,
`affilicate_id` int(11) NOT NULL,
`point` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `phone_points` (`id`, `phone_id`, `tarrif_id`, `affilicate_id`, `point`) VALUES
(1, 1, 1, 1, 3.3),
(2, 1, 2, 2, 7.3);
CREATE TABLE IF NOT EXISTS `saletype` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `saletype` (`id`, `name`) VALUES
(1, 'Consumer Upgrade'),
(2, 'Consumer New Connection'),
(3, 'Sim-Only Deal');
CREATE TABLE IF NOT EXISTS `tariff_point` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tarrif_id` int(11) NOT NULL,
`affilicate_id` int(11) NOT NULL,
`point` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `tariff_point` (`id`, `tarrif_id`, `affilicate_id`, `point`) VALUES
(3, 3, 1, 10);
CREATE TABLE IF NOT EXISTS `tarrif` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`network_saletype_id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`tariff_duration` int(11) NOT NULL,
`monthly_cost` decimal(6,2) NOT NULL,
`description` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `tarrif` (`id`, `network_saletype_id`, `name`, `tariff_duration`, `monthly_cost`, `description`) VALUES
(1, 1, 'Super One', 12, '12.00', '200 Mins, 400 Texts, 500MB Internet'),
(2, 1, 'Super One', 12, '35.00', '200 Mins, 400 Texts, 500MB Internet'),
(3, 2, 'X-Deal Two', 12, '18.00', '');
結果
mysql> select * from network;
+----+----------+
| id | name |
+----+----------+
| 1 | T-Mobile |
| 2 | AT&T |
+----+----------+
mysql> select * from affiliate;
+----+--------------+
| id | name |
+----+--------------+
| 1 | Retailer One |
| 2 | Retailer Two |
+----+--------------+
mysql> select * from saletype;
+----+-------------------------+
| id | name |
+----+-------------------------+
| 1 | Consumer Upgrade |
| 2 | Consumer New Connection |
| 3 | Sim-Only Deal |
+----+-------------------------+
mysql> select * from network_saletype;
+----+------------+-------------+
| id | network_id | saletype_id |
+----+------------+-------------+
| 1 | 1 | 1 |
| 2 | 2 | 3 |
+----+------------+-------------+
mysql> select * from tarrif;
+----+---------------------+------------+-----------------+--------------+-------------------------------------+
| id | network_saletype_id | name | tariff_duration | monthly_cost | description |
+----+---------------------+------------+-----------------+--------------+-------------------------------------+
| 1 | 1 | Super One | 12 | 12.00 | 200 Mins, 400 Texts, 500MB Internet |
| 2 | 1 | Super One | 12 | 35.00 | 200 Mins, 400 Texts, 500MB Internet |
| 3 | 2 | X-Deal Two | 12 | 18.00 | |
+----+---------------------+------------+-----------------+--------------+-------------------------------------+
mysql> select * from tariff_point;
+----+-----------+---------------+-------+
| id | tarrif_id | affilicate_id | point |
+----+-----------+---------------+-------+
| 3 | 3 | 1 | 10 |
+----+-----------+---------------+-------+
mysql> select * from phone;
+----+-------------------+---------------------------------+
| id | name | description |
+----+-------------------+---------------------------------+
| 1 | Samsung Galaxy S3 | Quad-core, NFC, AMOLED |
| 2 | Apple iPhone 4S | A5 chip, 8MP camera, Siri voice |
+----+-------------------+---------------------------------+
mysql> select * from phone_points;
+----+----------+-----------+---------------+-------+
| id | phone_id | tarrif_id | affilicate_id | point |
+----+----------+-----------+---------------+-------+
| 1 | 1 | 1 | 1 | 3.3 |
| 2 | 1 | 2 | 2 | 7.3 |
+----+----------+-----------+---------------+-------+
編集:私の質問は、電話、タリフ、ネットワーク、saleTypeの間の関係の設計は大丈夫ですか?基本的に、オペレーターは小売業者を選択し、次にモバイルネットワークを選択します。次に、販売の種類(例:消費者向けアップグレード)を選択し、関連する料金の電話を選択します。選択したタリフや電話に応じて、オペレーターはポイント数を取得します。