如何设计一个数据库

moh*_*raj 4 postgresql database-design

包含每位员工日常活动的文件。它显示了员工在工作时间所做的详细描述。所以这些文件是由员工准备的。

现在,我的需求是如何为这个模型设计一个数据库。我只知道数据库的基础知识,但我没有设计任何数据库。因此,任何人都可以帮助我解决如何为应用程序创建数据库设计。

该设计还应该适用于查询以获取有关单个员工的详细信息,例如

例如:

  1. shiva 'shiva' 在 CCTNS 项目上花费的总时间

  2. 查找指定项目的团队负责人

  3. 查找特定项目中的成员

Chr*_*ton 7

如果您从头开始创建这一切,我会为此目的建议两个基本表。这假设这是在 PostgreSQL 中创建的。

包含他们的姓名和任何其他对您的应用程序很重要的详细信息的员工表,带有数字主键。主键很重要,因为您可能有多个同名的员工,并且您将来可能会有更名的员工。使用密钥可以使有关他们的时间的信息保持一致。

活动日志表包含:

  • 一个主键列(类型SERIAL可能适合这个)
  • 员工 ID 列(这将引用另一个表中的列)
  • 一个项目列(您可以将其设为自由文本,或创建另一个带有主键的表并在此处引用它),该列应该可以为空以反映与项目无关的活动日志条目(例如茶歇)
  • tstzrange表示日志条目周期的列

现在这个模式没有包含足够的信息来识别团队领导。您可以将此信息添加到另一个表中,引用您的员工(可能还有项目)表。

这是您可以使用的快速示例架构:

 CREATE TABLE employees (
     employee_id SERIAL NOT NULL,
     employee_name text NOT NULL,
     PRIMARY KEY (employee_id)
 );

 CREATE TABLE projects (
     project_id SERIAL NOT NULL,
     project_name text NOT NULL,
     PRIMARY KEY (project_id)
 );

 CREATE TABLE project_memberships (
     employee_id integer NOT NULL REFERENCES employees,
     project_id integer NOT NULL REFERENCES projects,
     supervisor_employee_id integer REFERENCES employees,
     PRIMARY KEY (employee_id, project_id)
 );

 CREATE TABLE activity_logs (
     activity_log_id SERIAL NOT NULL,
     employee_id integer NOT NULL REFERENCES employees,
     project_id integer,
     activity_time tstzrange NOT NULL,
     activity_notes text,
     PRIMARY KEY (activity_log_id)
 );
 ALTER TABLE ONLY activity_logs
     ADD CONSTRAINT activity_logs_project_member_fkey FOREIGN KEY (employee_id, project_id) REFERENCES project_memberships(employee_id, project_id);
Run Code Online (Sandbox Code Playgroud)