2015-06-06 4 views
0

Я имею следующие базы данных:Поиск избыточности в таблице

enter image description here

Теперь я хочу, чтобы определить основные проблемы избыточности данных, демонстрируемые этой файловой структуры. Также есть некоторые изменения, которые могут быть сделаны для Employee_Name и Employee_Phone? Я новичок в базе данных и всех, поэтому, пожалуйста, помогите

ответ

0

Я бы посоветовал вам хранить таблицу для ваших проектов и отдельную таблицу для ваших сотрудников. Я не знаю, что вы пытаетесь выполнить, поэтому, возможно, сотрудники - это таблица People с флагом, указывающим на сотрудника. Тогда я бы сохранил отдельную таблицу (я бы назвал ее Activity), которая ссылается на проекты и сотрудники и содержит HoursWorked и, возможно, некоторые заметки. Затем, чтобы получить то, что у вас здесь, я бы создал представление, которое объединяет таблицы и группы Project и Employee и суммирует отработанные часы.

Somthing как:

Create table Project 
(
    ID int not null, 
    ProjectCode nvarchar(32), 
    ProjectName nvarchar(128) 
); 

Create table Employee 
(
    ID int not null, 
    EmployeeName nvarchar(128), 
    PhoneNumber nvarchar(32) 
); 

Create table Activity 
(
    ID int not null, 
    EmployeeID int not null, 
    ProjectID int not null, 
    Hours decimal, 
    Notes nvarchar(MAX) 
); 

Create View HoursWorked AS 
SELECT 
    P.ProjectCode, 
    P.ProjectName, 
    E.EmployeeName, 
    SUM(A.Hours) AS HoursWorked, 
    E.PhoneNumber 
FROM 
    Activity A 
    INNER JOIN Project P ON P.ID = A.ProjectID 
    INNER JOIN Employee E ON E.ID = A.EmployeeID 
GROUP BY 
    P.ProjectCode, 
    P.ProjectName, 
    E.EmployeeName, 
    E.PhoneNumber 
; 

Вы должны были бы создать внешние ключевые отношения и все. Также я не тестировал это, поэтому, возможно, я испортил некоторые синтаксисы, но идея там.

+0

Не могли бы вы упомянуть об увольнениях, прежде чем отправлять решение для его устранения? – ms8

+0

Ну, если вы продолжаете повторять сотрудников или проекты в таблице, вы снова и снова будете получать эти данные. Но если вы отделите их, вам понадобится отдельное место для хранения часов. Следовательно, мое высшее. – Brett

0

Предлагаю использовать три таблицы: проекты, люди, работа.

Проекты проведет код и название

Люди держат имя и телефон

Работа будет содержать записи для каждого события работы, с интервалом в течение времени работал, первичный ключ для человека, который работал, и первичный ключ для проекта, над которым работал человек.

Затем, чтобы вывести таблицу, как и исходную, вы выберете из всех трех. Если вам нужен пример такого запроса, прокомментируйте, и я автор этого.

+0

Пожалуйста, добавьте пример. Также как насчет Employee_Name и Employee_Phone? Любые изменения для него? – ms8

+0

Также, пожалуйста, добавьте объяснение, почему вы нарушаете таблицу? Вы опубликовали решение по его устранению, но это было причиной? Добавьте, что – ms8

+0

Бретт разработал ту же концепцию, я бы отложил его ответ, мой код будет похож. Что касается избыточности, вы хотите ссылаться на все повторяющиеся, так что вы не храните что-то наподобие имени человека несколько раз. Это делает базу данных более медленной, менее эффективной и сложнее модифицировать. –

Смежные вопросы