سؤال

هل هذا في 3NF؟

create table movies( 
  id numeric primary key not null default autoincrement,
  name varchar(50) not null, 
  release-date Date, 
  price numeric, 
  rating numeric,
  length numeric,
  description varchar(1500)
);

create table movies( 
  id numeric primary key, 
  name varchar(20) 
);

create table genre(
  name varchar(20) primary key
);

create table directors(
  id numeric primary key not null default autoincrement, 
  first-name varchar(32) not null, 
  last-name varchar(32) not null, 
  gender varchar(8), 
  dob Date, 
  biography varchar(1000)
);

create table movie-Star(
  id numeric primary key not null default autoincrement, 
  first-name varchar(20) not null, 
  last-name varchar(20) not null,
  gender varchar(8), 
  dob Date, 
  hometown varchar(20)
);

create table movies-cast(
  movie-id numeric references movies(id), 
  actor-id numeric references movie-Star(id), 
  role varchar(32), 
  primary key (movie-id, actor-id)
);

Create table Studio( 
  studio-id numeric references directors(id)
  Directer-name varchar(20) not null
  name varchar(20) primary key
);

create table directors(
  id numeric primary key not null default autoincrement, 
  first-name varchar(32) not null, 
  last-name varchar(32) not null, 
  gender varchar(8), 
  dob Date, 
  biography varchar(1000)
);
هل كانت مفيدة؟

المحلول

تبدو منظمة بشكل جيد. لا أرى أي مشاكل تطبيع. لكن:

  • يتم إنشاء طاولات الأفلام والمخرج مرتين.
  • لا يتم استخدام جدول النوع لأي شيء (من المفترض أن يكون في الأفلام).
  • نفس الشيء مع الاستوديوهات.
  • الترتيب الحالي يسمح لمخرج واحد فقط لكل استوديو. من المحتمل أن يكون هذا أ) استوديوًا واحدًا لكل مخرج (إضافة عمود Studio_id إلى المديرين) أو على الأرجح ب) علاقة كثيرة إلى حد بين الاستوديو والمخرج (إضافة جدول جديد Studio_Directors).
  • الترتيب الحالي لا يربط المخرج بالفيلم.
  • قد تفكر في الجمع بين المخرج والفيلم في طاولة واحدة تسمى Talent. لديك تكرار بيانات يكون فيه النجم أيضًا مخرجًا. هذه هي أكبر مشكلة تطبيع مع التصميم الخاص بك.

نصائح أخرى

إذا كان لا يمكن تكرار كل شيء مرة أخرى ، فسيتم تضمينه 3NF. تأكد من عدم وجود بيانات مكررة مرة أخرى

لديها E PK ، لذلك في 1NF. إنه PK ليس مركبًا ، لذا فهو في 2NF. جميع الأعمدة تعتمد على لا شيء سوى المفتاح ، لذلك في 3NF. لا توجد مفاتيح غير PK ، لذلك فهي في BCNF.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top