Не уверен, что если вы спрашиваете, является ли ваша схема хорошо или как получить нужную информацию, так вот как:
Я бы обновить вашу схему к этому:
клиентов (p_key = CustomerId)
- CustomerId (интермедиат)
- FirstName (VARCHAR)
- LastName (VARCHAR)
Телефон (p_key = CustomerId, PHONETYPE, DateEffective) Клиенты могут иметь несколько типов телефонов (мобильный, домашний, рабочий) и может дать вам кратные те (получили новый номер). Вы можете либо перезаписать, либо сохранить историю с помощью DateTime, номер стал эффективным.
- CustomerId (интермедиат)
- PHONETYPE (VARCHAR)
- DateEffective (DateTime)
- AreaCode (VARCHAR) - не использовать номера, если это возможно, чтобы начать с 0 по
- PhoneNumber (VARCHAR) - не использовать номера, если это возможно, чтобы начать с 0 по
Адрес (p_key = CUSTOMERID, AddressType , DateEffective) Почтовые и физические адреса и история, например Телефон.
- CustomerId (интермедиат)
- AddressType (VARCHAR)
- DateEffective (DateTime)
- Street1 (VARCHAR)
- Street2 (VARCHAR)
- Город (VARCHAR)
- State (varchar)
- Zip (varchar) - не используйте числа, начиная с начала zip с 0
Лечение (p_key = TreamentId)
- TreatmentId (INT)
- Тип (VARCHAR)
TreatmentStage (p_key = TreamentId, Стадия)
- TreatmentId (интермедиат)
- Stage (INT)
- Описание (VARCHAR)
Визит (p_key = все столбцы) Клиент может иметь несколько этапов обработки/лечения в тот же день.
- CustomerId (интермедиат)
- TreatmentId (интермедиат)
- TreatmentStage (интермедиат)
- DateVisit (DateTime)
Назначение (p_key = CustomerId, AppointmentDate, AppointmentTime) Вы могут сочетать AppointmentDate и AppointmentTime с AppointmentDateTime, хотя это не так, как большинство людей думают об этом.
- Тип (VARCHAR)
- AppointmentDate (дата)
- AppointmentTime (время)
- CommentID (интермедиат)
- CustomerId (интермедиат)
Transaction (p_key = TransactionId)
- TransactionID
- Тип (VARCHAR)
- TransactionTimestamp (DateTime)
- CommentID (интермедиат)
- CustomerId (интермедиат)
Комментарий (p_key = CommentID) Это получает ваш свободный формируйте текст из всех ваших других таблиц и централизуйте его в комментарии. Это будет с производительностью, так как большую часть времени вам не нужно загружать комментарии плюс данные, вероятно, будут превышать размер страницы по умолчанию.
- CommentID (интермедиат)
- Комментарий (VARCHAR)
Код (p_key = CodeType, код)
- CodeType (VARCHAR)
- Код (VARCHAR)
- CodeDescription (varchar)
В таблице кодов должны храниться ваши «Типы» (тип распределения, тип транзакции, тип телефона и т. Д.), Поэтому у вас есть список кодов, их описания, и вы можете использовать это в критериях присоединения, если необходимо (отчетность) ,
Часть запроса довольно прямо вперед:
SELECT c.*
FROM Visit v
INNER JOIN Customer c
on v.CustomerId = c.CustomerId
WHERE v.DateVisit > DATE_ADD(NOW(), INTERVAL 1 YEAR)
Вы можете достичь такого рода отчета по SQL Query. [этот пост] (http://stackoverflow.com/a/1415448/2627842) может быть вам полезен. –
@ArifulHaque означает, что я могу использовать вышеуказанный план, а затем просто использовать ваш SQL-запрос комментариев, чтобы получить соответствующие данные, как я хочу, правильно? –
Да, вы можете! Я считаю, что ваш вышеприведенный план показывает текст здесь. Вам необходимо установить 'primary_key' для каждой таблицы _ (например, customer_id_ для таблицы Customer) и в таблице посещений вы должны установить связь с таблицей Customer, используя' customer_id' как 'foreign_key' здесь. Стол посещений также должен иметь свою «primary_key», например. visit_sn _ Надеюсь, он заставит вас это понять. –