2013-05-28 53 views
1

我的数据库:SQL数据库设计的建议需要

CREATE DATABASE `cars` /*!40100 DEFAULT CHARACTER SET latin1 */; 

DROP TABLE IF EXISTS `cars`.`employees`; 
CREATE TABLE `cars`.`employees` (
    `emp_id` int(11) NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(40) DEFAULT NULL, 
    `last_name` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`emp_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

DROP TABLE IF EXISTS `cars`.`products`; 
CREATE TABLE `cars`.`products` (
    `prod_id` int(11) NOT NULL AUTO_INCREMENT, 
    `prod_name` varchar(40) DEFAULT NULL, 
    `prod_price` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`prod_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

这是我的数据库查询。我有创建CARS数据库的任务,其中包含有关员工和汽车的信息,数据库也必须包含有关销售哪辆汽车以及哪个工人销售汽车的信息。

我的问题:如何存储销售,以便我记录哪个员工销售了哪些汽车。

回答

1

这是一个设计决策越过你(或别人在你的组织)必须先发展体贴的1NF方向。为了回答您的具体问题,这是一个典型的情况,即需要XRef表将所有客户车辆关联以及与销售相关的额外细节放在一起。 即:

Sale table: 
----------------------------- 
sale_id autonumeric(1,1) PK 
, emp_id int FK 
, prod_id int FK 
, price decimal(10,2) 
, sold_date datetime(2) 
, other_interesting_sale_details 

这是一个可能的解决方案,将保留历史信息有关该汽车由一个特定的雇员出售以及其他详细信息也可能是为特定的商业利益。

我希望它有帮助。

4

可能创建一个表,用于保存员工出售哪些车型?

EmployeeSales 
--------------- 
emp_id 
prod_id 
OtherInfo 
+0

根据'产品'表包含汽车实体本身的汽车模型。在这种情况下,你不需要另一张桌子。 'products'应该包含'employees'表和'status'字段的外键。 –

0

取决于你想如何扩张去......你有一个产品表...这将是它为您的汽车每辆汽车将只被添加到该直接?如果是这样,那么你可以只钉在两个领域

在产品表中,添加一列“SoldBy”为整数。这可能是员工表员工标识的链接。

如果该值填充,它的出售,如果出售,它是谁把它卖了员工。