2016-11-13 1 views
-1

cas: dans un paquet j'ai une classe qui Réalise activirt pour les patients & médecinsComment supprimer des documents simultanément?

  • opérations Patient specifict (post, get, put, delete) sont effectuées par Patient contrôleur,

  • Docteur specifict opérations (post, get, put, delete) sont effectués par Doctor contrôleur

il y a:

  • 4 médecins: A, B, C et D;
  • 50 patients - l'un d'eux avec le nom Z
  • un médecin ont plusieurs patients
  • un patient peut consulter plusieurs médecins

patient Z consulte les médecins A, B & D.

Question: Comment, lors de la suppression du patient, le retirer de chacun des médecins qu'il fréquente, et lors de la suppression du médecin, le retirer des patients qui l'ont assisté?

Répondre

0

Si je comprends bien votre cas d'utilisation correcte, c'est ce que vous voulez faire

docteur A a assisté à des patients x, y, z ...
docteur B a assisté à des patients x, y, z ...
Docteur C ont assisté patients x, y, k ... (le médecin C n'a pas consulté le patient z).
Docteur D a assisté à des patients x, y, z ...

Maintenant, vous regardez dans la liste des patients suivis par le médecin A, et vous supprimé z patient de cette liste. Ainsi, le patient z devrait être supprimé de la liste des médecins B et D. Vous voulez modéliser les données pour la base de données Cassandra.

Nous devons nous souvenir des objectifs tout en modélisant le schéma de Cassandra.

Premier but- Connaître vos données de requête.
Deuxième objectif - Essayez de distribuer les données à travers le cluster.
Troisième objectif - Réduire le nombre de lectures de partition. Nos questions seraient -
1 - Obtenez tous les patients fréquentés par le Docteur A (B, C, D).
2 - Supprimer l'historique du patient (à partir de n'importe quelle liste).

Donnons un essai -

CREATE TABLE VISITS_BY_DOCTOR(
Doctor_name text , 
Patient_name text , 
. 
. 
. 
Other columns 

PRIMARY KEY (Doctor_name, Patient_name ) 
) 

Cela satisfera nos deux objectifs. Premier objectif, dans une requête, nous pouvons obtenir la liste des patients suivis par le docteur A.
Sélectionnez * dans VISITS_BY_DOCTOR où Doctor_name = A;
Supprimer de VISITS_BY_DOCTOR où patient_name = z; Deuxième objectif, il minimise également le nombre de lectures de partition car nous pouvons obtenir des données basées sur la clé de partition "doctor_name". Mais cette conception ne satisfait pas au troisième objectif, répartir les données à travers le cluster. Alors améliorons-le.

CREATE TABLE VISITS_BY_DOCTOR(
Doctor_name text , 
Patient_name text , 
Visit_date bigint, 
. 
Other columns 

PRIMARY KEY ((Doctor_name, Patient_name), Visit_date ) 
) WITH CLUSTERING ORDER BY (Visit_date DESC). 

Cela répondra à l'objectif de «répartir les données dans le cluster». En outre, il peut être utilisé pour obtenir l'histoire en fonction de la date de visite.

+0

Je suppose que même cela peut répartir des données entre les clusters ((PRIMARY KEY (Doctor_name, Patient_name)) sans ajouter le paramètre Visit_date Êtes-vous d'accord? –

+0

En outre, vous ne pouvez pas supprimer Delete from VISITS_BY_DOCTOR où patient_name = z; comme il manque la clé de parition –