M. Rawan Ответов: 1

Как хранить два класса наследуют один и тот же интерфейс в базе данных SQL


привет

Мне трудно понять, как это должно храниться в базе данных sql
public interface IEmployee {
        string Name { get; set; }
        decimal CalculateSalary();
    }
public class Emp1 : IEmployee {
        public string Name { get; set; }
        //some other properties
        //.....
        public decimal CalculateSalary(){...}
    }
public class Emp2 : IEmployee {
        public string Name { get; set; }
        //some other properties
        //.....
        public decimal CalculateSalary(){...}
    }


Что я уже пробовал:

если каждый конкретный класс emp имеет свою собственную таблицу, как применить метод get all employees?

Или у меня должна быть таблица BaseEmp для хранения имен со столбцом emptyype, и каждый конкретный класс emp имеет свои собственные сведения в другой таблице? если это правильный путь, должны ли эти типы быть перечислением в моей библиотеке или есть лучший способ?

CHill60

Emp1 и Emp2 звучат скорее как экземпляры Employee, чем типы employee. Лично я бы в базовой таблице сотрудник со столбцом типа работника. Я бы абсолютно не хотел, чтобы каждый конкретный класс был в своей собственной таблице.

M. Rawan

спасибо за ваш ответ, я думал, что тоже только запутался в том, где хранить эти типы (должен ли это быть int, который передается каждому сотруднику constrcutor, или перечисление в моей библиотеке, или просто фиксированный int только для чтения в каждом классе)?

CHill60

Так что то, как вы храните его в базе данных, полностью зависит от вас. Если вы используете перечисление в SQL, вам, возможно, придется изменить схему таблицы, если появится новый тип. Но вы можете хранить перечисление из вашего пользовательского интерфейса как Int в вашей базе данных. Или вы можете использовать varchar или даже char(1). Все, что вы думаете, будет наиболее значимым, но, возможно, не займет слишком много места.
Однако с точки зрения ваших классов - вы ничего не передадите конструкторам - класс должен знать, что это за "тип" сотрудника, например, используя жестко закодированное значение для "типа" в каждом конструкторе класса, где все классы наследуются от базового класса "сотрудник".

M. Rawan

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

1 Ответов

Рейтинг:
6

CHill60

Как предложил ОП вот мой комментарий в качестве решения

Так что то, как вы храните его в базе данных, полностью зависит от вас. Если вы используете перечисление в SQL, вам, возможно, придется изменить схему таблицы, если появится новый тип. Но вы можете хранить перечисление из вашего пользовательского интерфейса как Int в вашей базе данных. Или вы можете использовать varchar или даже char(1). Все, что вы думаете, будет наиболее значимым, но, возможно, не займет слишком много места.
Однако с точки зрения ваших классов - вы ничего не передадите конструкторам - класс должен знать, что это за "тип" сотрудника, например, используя жестко закодированное значение для "типа" в каждом конструкторе класса, где все классы наследуются от базового класса "сотрудник".


Maciej Los

5ed!