2012-02-07 13 views
1

У меня есть два класса (книга, программное обеспечение), которые наследуются от класса Product. эти два класса имеют несколько полей, которые отличаются друг от друга. если я хочу сохранить данные для обоих этих классов в одной таблице, это приведет к тому, что некоторые столбцы будут иметь нулевые значения.Как я могу структурировать свои данные?

Если я сохраню данные в разных таблицах (таблица книг и таблица программного обеспечения), а затем захочет просмотреть эти данные в одном gridview, мне нужно будет присоединиться к данным, а затем загрузить их в gridview?

Я хотел бы добавить еще 2 класса (IndividualCustomer, WholesaleCustomer), впоследствии наследующий класс Customer таким же образом, как указано выше.

, пожалуйста, руководство меня к лучшей approach.thank вы

+1

Какова структура ваших таблиц/базы данных, есть ли у вас какие-либо настройки истинных отношений? – MethodMan

+0

нет, я еще не установил какие-либо отношения, мне нужен совет о том, как подойти к дизайну. – Xerxes

ответ

3

Я не программист C#, но я бы с чем-то вроде

`products` table 
- product_id (pk) 
- title 
- price 
- etc 

`products_software` table 
- software_id (pk) 
- product_id (foreign key, relates to a product_id) 
- serial_number 
- storage_media 

`products_books` table 
- book_id (pk) 
- product_id (foreign key, relates to a product_id) 
- pages 
- author 
+0

, и если бы я хотел просмотреть объединенные данные в одном gridview, как бы я запросил базу данных? – Xerxes

+2

Я не могу дать вам ответ C#, но SQL может выглядеть примерно так: 'SELECT * FROM products p INNER JOIN products_software ps ON p.product_id = ps.product_id UNION SELECT * FROM products p INNER JOIN products_books pb ON p.product_id = pb.product_id' – Joe

+2

С помощью этого дизайна вы можете иметь много книг на каждый книжный продукт. Для представления наследования в реляционной БД должна быть лучше 1: 1 ассоциация, чем ассоциация 1: N. –

3

В подобных ситуациях я создаю три таблицы: продукт, книги и программное обеспечение.

В продукте Я поставлю ПК и все обычные поля; в Книге те же PK и книги конкретных полей; так же, как «Книга для программного обеспечения».

Ассоциации между этими таблицами должны быть 1: 1.

1

книги и софт не разные продукты они просто разные категории.

Я хотел бы создать несколько таблиц: Продукты Категории Свойства PropertiesToCategories PropertiesToProducts

В этой форме вы можете прикрепить некоторые свойства каждой категории, например: книги есть автор, заглавие, Издательство

Когда вы хотите добавить новый продукт, который вы должны выбрать сначала в категории, а затем добавить новый (для книг: автор, название, издатель) свойства.

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